#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
调试RAG API的具体问题

专门用于调试为什么RAG API返回空数据
"""

import requests
import tempfile
import os
import json

def create_test_resume():
    """创建一个测试简历文件"""
    resume_content = """
杨森简历

个人信息：
姓名：杨森
工作经验：4年
教育背景：统招本科
期望地点：西安
期望薪资：15000-20000

技能专长：
- 编程语言：Java, Python, JavaScript
- 后端框架：Spring Boot, SpringMVC, MyBatis
- 前端技术：Vue.js, React, HTML5, CSS3
- 数据库：MySQL, Redis, MongoDB
- 开发工具：IDEA, Git, Maven

工作经历：
2020-2024 Java开发工程师 - 西安软件园
- 负责企业级应用开发
- 参与微服务架构设计
- 维护数据库和缓存系统

项目经验：
1. 电商管理系统
   - 技术栈：Spring Boot + Vue + MySQL
   - 负责订单管理模块开发
   
2. 用户管理平台
   - 技术栈：Java + Redis + MyBatis
   - 实现用户权限管理功能

教育背景：
2016-2020 西安电子科技大学 计算机科学与技术 本科

自我评价：
4年Java开发经验，熟悉企业级应用开发，
有良好的编程习惯和团队协作能力。
"""
    
    # 创建临时文件
    temp_file = tempfile.NamedTemporaryFile(
        mode='w', 
        delete=False, 
        suffix='.txt',
        prefix='debug_resume_',
        encoding='utf-8'
    )
    
    temp_file.write(resume_content.strip())
    temp_file.close()
    
    print(f"📝 创建测试简历: {temp_file.name}")
    return temp_file.name

def test_rag_api_with_debug():
    """测试RAG API并查看详细调试信息"""
    
    print("🚀 开始调试RAG API")
    print("=" * 60)
    
    # 创建测试文件
    test_file = create_test_resume()
    
    try:
        print("📤 上传简历文件到RAG API...")
        
        with open(test_file, 'rb') as f:
            files = {'resume_file': f}
            data = {'top_n': 5}
            
            print(f"📂 文件大小: {os.path.getsize(test_file)} 字节")
            print(f"🎯 请求推荐数量: 5")
            
            response = requests.post(
                'http://localhost:8000/api/resume/recommend/', 
                files=files,
                data=data,
                timeout=60  # 增加超时时间
            )
        
        print(f"📊 HTTP状态码: {response.status_code}")
        print(f"📋 响应头: {dict(response.headers)}")
        
        if response.status_code == 200:
            try:
                result = response.json()
                print("✅ JSON解析成功")
                print(f"📊 响应成功: {result.get('success')}")
                print(f"💬 响应消息: {result.get('message')}")
                
                if result.get('success'):
                    data = result.get('data', {})
                    resume_info = data.get('resume_info', {})
                    recommendations = data.get('job_recommendations', [])
                    summary = data.get('recommendation_summary', {})
                    
                    print("\n📋 简历信息:")
                    print(f"   文件名: {resume_info.get('file_name')}")
                    print(f"   技能数量: {len(resume_info.get('skills', []))}")
                    print(f"   技能列表: {resume_info.get('skills', [])}")
                    print(f"   工作经验: {resume_info.get('experience_years')} 年")
                    print(f"   教育背景: {resume_info.get('education')}")
                    print(f"   地点: {resume_info.get('location')}")
                    
                    print("\n🎯 推荐结果:")
                    print(f"   推荐岗位数: {len(recommendations)}")
                    print(f"   总推荐数: {summary.get('total_recommendations')}")
                    print(f"   平均分数: {summary.get('avg_match_score')}")
                    print(f"   ES结果数: {summary.get('es_results_count')}")
                    print(f"   Milvus结果数: {summary.get('milvus_results_count')}")
                    
                    if recommendations:
                        print(f"\n📄 第一个推荐岗位详情:")
                        first_job = recommendations[0]
                        for key, value in first_job.items():
                            print(f"   {key}: {value}")
                    else:
                        print("❌ 推荐岗位列表为空！")
                        
                    # 保存完整结果
                    output_file = "debug_rag_result.json"
                    with open(output_file, 'w', encoding='utf-8') as f:
                        json.dump(result, f, ensure_ascii=False, indent=2)
                    print(f"\n💾 完整结果保存到: {output_file}")
                    
                else:
                    print(f"❌ API返回失败: {result.get('message')}")
                    print(f"🔍 错误代码: {result.get('error')}")
                    
            except json.JSONDecodeError as e:
                print(f"❌ JSON解析失败: {e}")
                print(f"📄 原始响应: {response.text[:500]}...")
                
        else:
            print(f"❌ HTTP请求失败: {response.status_code}")
            print(f"📄 错误内容: {response.text[:500]}...")
    
    except requests.exceptions.Timeout:
        print("❌ 请求超时，可能RAG处理时间过长")
    except requests.exceptions.ConnectionError:
        print("❌ 连接失败，请确保Django服务器在运行")
    except Exception as e:
        print(f"❌ 请求异常: {e}")
    
    finally:
        # 清理测试文件
        if os.path.exists(test_file):
            os.unlink(test_file)
            print(f"\n🗑️ 清理测试文件: {test_file}")

def test_rag_system_directly():
    """直接测试RAG系统函数"""
    print("\n" + "=" * 60)
    print("🔬 直接测试RAG系统函数")
    print("=" * 60)
    
    try:
        # 尝试导入RAG系统
        from resume_hybrid_search_system import (
            parse_resume_content,
            extract_key_info_from_resume,
            process_resume_and_recommend_jobs
        )
        
        print("✅ RAG系统导入成功")
        
        # 创建测试文件
        test_file = create_test_resume()
        
        try:
            print(f"📄 测试文件解析...")
            content = parse_resume_content(test_file)
            print(f"✅ 文件解析成功，内容长度: {len(content)}")
            print(f"📝 内容预览: {content[:200]}...")
            
            print(f"\n🔍 测试信息提取...")
            key_info = extract_key_info_from_resume(content)
            print(f"✅ 信息提取成功")
            print(f"📊 提取结果: {json.dumps(key_info, ensure_ascii=False, indent=2)}")
            
            print(f"\n🎯 测试完整RAG流程...")
            rag_result = process_resume_and_recommend_jobs(test_file, top_n=5)
            
            if rag_result:
                print(f"✅ RAG流程成功")
                print(f"📊 结果类型: {type(rag_result)}")
                print(f"📋 结果键: {list(rag_result.keys()) if isinstance(rag_result, dict) else 'Not a dict'}")
                
                # 保存直接测试结果
                with open("direct_rag_test.json", 'w', encoding='utf-8') as f:
                    json.dump(rag_result, f, ensure_ascii=False, indent=2)
                print(f"💾 直接测试结果保存到: direct_rag_test.json")
            else:
                print("❌ RAG流程返回空结果")
                
        finally:
            os.unlink(test_file)
            
    except ImportError as e:
        print(f"❌ RAG系统导入失败: {e}")
    except Exception as e:
        print(f"❌ RAG系统测试异常: {e}")
        import traceback
        print(f"🔍 异常堆栈: {traceback.format_exc()}")

def main():
    """主调试函数"""
    print("🔧 RAG API 调试工具")
    print("🎯 专门用于诊断推荐结果为空的问题")
    print()
    
    # 1. 测试API接口
    test_rag_api_with_debug()
    
    # 2. 直接测试RAG系统
    test_rag_system_directly()
    
    print("\n" + "=" * 60)
    print("✅ 调试完成！")
    print("📋 请查看上述输出找出问题所在")

if __name__ == "__main__":
    main()
